package com.liuqi.openai.core.client;

/**
 * 调用openai api接口的执行器
 *
 * 如果需要流式响应, 调用 {@link #injectStreamHandler} 方法注入一个回调接口
 *
 * @author liuqi
 * @date 2025/7/18
 **/
public interface Executor<Response> {

    /**
     * 发起请求,
     *
     * @return
     * @throws OpenAiRemoteException
     */
    Response execute() throws OpenAiRemoteException;

    /**
     * 注入一个流式响应的回调接口
     *
     * @param streamHandler
     */
    Executor<Response> injectStreamHandler(StreamHandler<Response> streamHandler);

    /**
     * 关闭正在请求的连接
     *
     * <p>
     *     适用于流式请求, 主动触发中断连接, 不再接收消息
     * </p>
     *
     */
    void close();

}
